package com.zzty.common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

/***
 * 事务的原子性（ Atomicity）：一组事务，要么成功；要么撤回。
 * 一致性 （Consistency）：事务执行后，数据库状态与其他业务规则保持一致。如转账业务，无论事务执行成功否，参与转账的两个账号余额之和应该是不变的。
 * 隔离性（Isolation）：事务独立运行。一个事务处理后的结果，影响了其他事务，那么其他事务会撤回。事务的100%隔离，需要牺牲速度。
 * 持久性（Durability）：软、硬件崩溃后，InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得， innodb_flush_log_at_trx_commit 选项 决定什么时候吧事务保存到日志里。
 * try{
 *      con.setAutoCommit(false);//开启事务
 *      ......
 *      con.commit();//try的最后提交事务
 * } catch（） {
 *     con.rollback();//回滚事务
 * }
 */

public class Transation {
    public static void main(String[] args) throws Exception{
        Class.forName("com.mysql.jdbc.Driver");
        Connection cn= DriverManager.getConnection("jdbc:mysql://106.15.181.248:3306/training", "root", "root");
        cn.setAutoCommit(false);
        PreparedStatement pst=cn.prepareStatement("insert into clazz values(?,?)");
        pst.setInt(1,101111);
        pst.setString(2,"test1111");
        pst.executeUpdate();

        PreparedStatement pst1=cn.prepareStatement("insert into clazz values(?,?)");
        pst1.setInt(1,102111);
        pst1.setString(2,"test2111");
        pst1.executeUpdate();
        cn.rollback();

        cn.commit();
        //fsdafsda

    }
}
